﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using QuanLyThuVien.DTO;
using System.Data;
using QuanLyThuVien.Supporter;
using System.Data.SqlClient;

namespace QuanLyThuVien.DAL
{
    //----------------------------------------------------------------------
    //Desc: class kết nối với bảng QUYDINH
    //----------------------------------------------------------------------
    public class DALQuyDinh
    {
        //----------------------------------------------------------------------
        //Desc: constructor mặc định
        //----------------------------------------------------------------------
        public DALQuyDinh()
        { }

        //----------------------------------------------------------------------
        //Desc: chuyển dòng dữ liệu thành QUYDINH
        //----------------------------------------------------------------------
        public DTOQuyDinh ConvertToQuyDinh(DataRow row)
        {
            DTOQuyDinh quydinh = new DTOQuyDinh();

            try { quydinh.TuoiToiThieu = Int32.Parse(row["TuoiToiThieu"].ToString()); }
            catch { }
            
            try { quydinh.TuoiToiDa = Int32.Parse(row["TuoiToiDa"].ToString()); }
            catch { }

            try { quydinh.ThoiHanThe = Int32.Parse(row["ThoiHanThe"].ToString()); }
            catch { }

            try { quydinh.ThoiHanXB = Int32.Parse(row["ThoiHanXB"].ToString()); }
            catch { }

            try { quydinh.SoNgayMuonTD = Int32.Parse(row["SoNgayMuonTD"].ToString()); }
            catch { }

            try { quydinh.SoSachMuonTD = Int32.Parse(row["SoSachMuonTD"].ToString()); }
            catch { }

            try { quydinh.TienPhatMoiNgay = Double.Parse(row["TienPhatMoiNgay"].ToString()); }
            catch { }

            try { quydinh.ApDungQDSoTienThu = Boolean.Parse(row["ApDungQDSoTienThu"].ToString()); }
            catch { }

            try { quydinh.NgayLapThuVien = DateTime.Parse(row["NgayLapThuVien"].ToString()); }
            catch { }

            return quydinh;
        }

        //----------------------------------------------------------------------
        //Desc: lấy quy định
        //----------------------------------------------------------------------
        public DTOQuyDinh LayQuyDinh()
        {
            if (DatabaseManager.DbConnection == null)
                return null;
            string spName = "spQuyDinh_LayQD";
            DataTable data = DatabaseManager.DbConnection.ExecuteStoredProcedure(spName);
            if (data == null || data.Rows.Count == 0)
                return null;
            return ConvertToQuyDinh(data.Rows[data.Rows.Count - 1]);
        }

        //----------------------------------------------------------------------
        //Desc: lấy thời hạn xb
        //----------------------------------------------------------------------
        public int LayThoiHanXB()
        {
            if (DatabaseManager.DbConnection == null)
                return -1;
            string spName = "spQuyDinh_LayThoiHanXB";
            DataTable data = DatabaseManager.DbConnection.ExecuteStoredProcedure(spName);
            if (data == null || data.Rows.Count == 0)
                return -1;
            int thoihanxb;
            try
            {
                thoihanxb = Int32.Parse(data.Rows[data.Rows.Count - 1]["ThoiHanXB"].ToString());
            }
            catch { return -1; }
            return thoihanxb;
        }

        //----------------------------------------------------------------------
        //Desc: lấy tuổi tối thiểu
        //----------------------------------------------------------------------
        public int LayTuoiToiThieu()
        {
            if (DatabaseManager.DbConnection == null)
                return -1;
            string spName = "spQuyDinh_LayTuoiToiThieu";
            DataTable data = DatabaseManager.DbConnection.ExecuteStoredProcedure(spName);
            if (data == null || data.Rows.Count == 0)
                return -1;
            int tuoitoithieu;
            try
            {
                tuoitoithieu = Int32.Parse(data.Rows[data.Rows.Count - 1]["TuoiToiThieu"].ToString());
            }
            catch { return -1; }
            return tuoitoithieu;
        }

        //----------------------------------------------------------------------
        //Desc: lấy tuổi td
        //----------------------------------------------------------------------
        public int LayTuoiToiDa()
        {
            if (DatabaseManager.DbConnection == null)
                return -1;
            string spName = "spQuyDinh_LayTuoiToiDa";
            DataTable data = DatabaseManager.DbConnection.ExecuteStoredProcedure(spName);
            if (data == null || data.Rows.Count == 0)
                return -1;
            int tuoitoida;
            try
            {
                tuoitoida = Int32.Parse(data.Rows[data.Rows.Count - 1]["TuoiToiDa"].ToString());
            }
            catch { return -1; }
            return tuoitoida;
        }

        //----------------------------------------------------------------------
        //Desc: lấy số ngày mượn td
        //----------------------------------------------------------------------
        public int LaySongayMuonTD()
        {
            if (DatabaseManager.DbConnection == null)
                return -1;
            string spName = "spQuyDinh_LaySoNgayMuonTD";
            DataTable data = DatabaseManager.DbConnection.ExecuteStoredProcedure(spName);
            if (data == null || data.Rows.Count == 0)
                return -1;
            int songaymuontd;
            try
            {
                songaymuontd = Int32.Parse(data.Rows[data.Rows.Count - 1]["SoNgayMuonTD"].ToString());
            }
            catch { return -1; }
            return songaymuontd;
        }

        //----------------------------------------------------------------------
        //Desc: lấy số sách mượn td
        //----------------------------------------------------------------------
        public int LaySoSachMuonTD()
        {
            if (DatabaseManager.DbConnection == null)
                return -1;
            string spName = "spQuyDinh_LaySoSachMuonTD";
            DataTable data = DatabaseManager.DbConnection.ExecuteStoredProcedure(spName);
            if (data == null || data.Rows.Count == 0)
                return -1;
            int sosachmuontd;
            try
            {
                sosachmuontd = Int32.Parse(data.Rows[data.Rows.Count - 1]["SoSachMuonTD"].ToString());
            }
            catch { return -1; }
            return sosachmuontd;
        }

        //----------------------------------------------------------------------
        //Desc: lấy tiền phạt mỗi ngày
        //----------------------------------------------------------------------
        public double LayTienPhatMoiNgay()
        {
            if (DatabaseManager.DbConnection == null)
                return -1.0F;
            string spName = "spQuyDinh_LayTienPhatMoiNgay";
            DataTable data = DatabaseManager.DbConnection.ExecuteStoredProcedure(spName);
            if (data == null || data.Rows.Count == 0)
                return -1;
            double tienphatmoingay;
            try
            {
                tienphatmoingay = Double.Parse(data.Rows[data.Rows.Count - 1]["TienPhatMoiNgay"].ToString());
            }
            catch { return -1; }
            return tienphatmoingay;
        }

        //----------------------------------------------------------------------
        //Desc: lấy thời hạn thẻ
        //----------------------------------------------------------------------
        public int LayThoiHanThe()
        {
            if (DatabaseManager.DbConnection == null)
                return -1;
            string spName = "spQuyDinh_LayThoiHanThe";
            DataTable data = DatabaseManager.DbConnection.ExecuteStoredProcedure(spName);
            if (data == null || data.Rows.Count == 0)
                return -1;
            int thoihanthe;
            try
            {
                thoihanthe = Int32.Parse(data.Rows[data.Rows.Count - 1]["ThoiHanThe"].ToString());
            }
            catch { return -1; }
            return thoihanthe;
        }

        //----------------------------------------------------------------------
        //Desc: lấy qd số tiền thu
        //----------------------------------------------------------------------
        public int LayQDSoTienThu()
        {
            if (DatabaseManager.DbConnection == null)
                return -1;
            string spName = "spQuyDinh_LayQDSoTienThu";
            DataTable data = DatabaseManager.DbConnection.ExecuteStoredProcedure(spName);
            if (data == null || data.Rows.Count == 0)
                return -1;
            bool quydinh;
            try
            {
                quydinh = (bool)data.Rows[data.Rows.Count - 1]["ApDungQDSoTienThu"];
            }
            catch { return -1; }
            if (quydinh)
                return 1;
            else
                return 0;
        }

        //----------------------------------------------------------------------
        //Desc: lấy ngày lập thư viện
        //----------------------------------------------------------------------
        public object LayNgayLapThuVien()
        {
            if (DatabaseManager.DbConnection == null)
                return null;
            string spName = "spQuyDinh_LayNgayLapThuVien";
            DataTable data = DatabaseManager.DbConnection.ExecuteStoredProcedure(spName);
            if (data == null || data.Rows.Count == 0)
                return null;
            DateTime ngaylapthuvien;
            try
            { 
                ngaylapthuvien = DateTime.Parse(data.Rows[0]["NgayLapThuVien"].ToString());
            }
            catch { return null; }
            return (object)ngaylapthuvien;
        }

        //----------------------------------------------------------------------
        //Desc: cập nhật quy định
        //----------------------------------------------------------------------
        public bool CapNhat(DTOQuyDinh quydinh)
        {
            if (DatabaseManager.DbConnection == null)
                return false;
            string spName = "spQuyDinh_CapNhatQD";
            SqlParameter sqlprTuoiToiThieu = new SqlParameter("@TuoiToiThieu", SqlDbType.Int){ Value = quydinh.TuoiToiThieu };
            SqlParameter sqlprTuoiToiDa = new SqlParameter("@TuoiToiDa", SqlDbType.Int){ Value = quydinh.TuoiToiDa };
            SqlParameter sqlprThoiHanThe = new SqlParameter("@ThoiHanThe", SqlDbType.Int){ Value = quydinh.ThoiHanThe };
            SqlParameter sqlprThoiHanXB = new SqlParameter("@ThoiHanXB", SqlDbType.Int){ Value = quydinh.ThoiHanXB };
            SqlParameter sqlprSoSachMuonTD = new SqlParameter("@SoSachMuonTD", SqlDbType.Int){ Value = quydinh.SoSachMuonTD };
            SqlParameter sqlprSoNgayMuonTD = new SqlParameter("@SoNgayMuonTD", SqlDbType.Int){ Value = quydinh.SoNgayMuonTD };
            SqlParameter sqlprTienPhatMoiNgay = new SqlParameter("@TienPhatMoiNgay", SqlDbType.Money)
            { Value = quydinh.TienPhatMoiNgay };
            SqlParameter sqlprApDungQDSoTienThu = new SqlParameter("@ApDungQDSoTienThu", SqlDbType.Bit)
            { Value = quydinh.ApDungQDSoTienThu };
            SqlParameter sqlprNgayLapThuVien = new SqlParameter("@NgayLapThuVien", SqlDbType.Date) { Value = quydinh.NgayLapThuVien };
            return DatabaseManager.DbConnection.ExecuteStoredProcedureNonQuery(spName, sqlprTuoiToiThieu, sqlprTuoiToiDa,
                sqlprThoiHanThe, sqlprThoiHanXB, sqlprSoSachMuonTD, sqlprSoNgayMuonTD, sqlprTienPhatMoiNgay,
                sqlprApDungQDSoTienThu, sqlprNgayLapThuVien);
        }
    }
}
